﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Threading;
using System.Web;
using Microsoft.Office.Interop;
using System.Globalization; 


namespace ConcertSpace
{
    public delegate void OuvreEtMetAJour();

    public partial class Form1 : Form
    {
        ExtracteurHTML extr = new ExtracteurHTML();
        GestionConcertsMyspace g = new GestionConcertsMyspace();

        Browser browser = null;

        Thread thread_ouverture;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //treeView1.ImageList.Images.Add("groupe", new Bitmap("groupe.png"));
            treeView1.ImageList.Images.Add("heure", new Bitmap("heure.jpg"));
            treeView1.ImageList.Images.Add("lieu", new Bitmap("pin.png"));
            treeView1.ImageList.Images.Add("titre", new Bitmap("arrow.png"));
            treeView1.ImageList.Images.Add("croix", new Bitmap("croix.png"));
            treeView1.ImageList.Images.Add("groupe", new Bitmap("myspace.png"));

            thread_ouverture = new Thread(new ThreadStart(Chargement));
            thread_ouverture.Start();
            
            this.Cursor = Cursors.WaitCursor;
            menuStrip1.Enabled = false;
        }

        private void OuvirEtMAJ()
        {
            if (this.menuStrip1.InvokeRequired)
            {
                OuvreEtMetAJour d = new OuvreEtMetAJour(OuvirEtMAJ);
                this.Invoke(d, new object[] { });
            }
            else
            {
                menuStrip1.Enabled = true;

                actualiser_treeview();

                this.Cursor = Cursors.Default;
            }
        }

        private void MAJSafe()
        {
            if (this.treeView1.InvokeRequired)
            {
                OuvreEtMetAJour d = new OuvreEtMetAJour(MAJSafe);
                this.Invoke(d, new object[] { });
            }
            else
            {
                actualiser_treeview();
            }
        }

        private void Chargement()
        {
            OuvreEtMetAJour fct = new OuvreEtMetAJour(MAJSafe);

            while (Thread.CurrentThread.IsAlive)
            {

                g.Ouvrir(fct);
                OuvirEtMAJ();


                Thread.CurrentThread.Abort();
            }
        }

        private void actualiser_treeview()
        {
            bool pertinent = false;
            string[] separateur = { "\r\n" };
            string[] criteres = g.criteres_alerte.Split(separateur, StringSplitOptions.RemoveEmptyEntries);

            for (int k = 0; k < criteres.Length; k++)
            {
                criteres[k] = g.RemoveDiacritics(criteres[k]).ToLower();
            }

            treeView1.BeginUpdate();

            treeView1.Nodes.Clear();

            if (Application.CurrentCulture.TwoLetterISOLanguageName == "fr")
            {
                tabControl1.TabPages[0].Text = "Groupes suivis (" + g.getGroupeCount() + ")";
            }
            else
            {
                tabControl1.TabPages[0].Text = "Bands (" + g.getGroupeCount() + ")";
            }

            
            for (int j = 0; j < g.getGroupeCount(); j++)
            {
                Groupe groupe = (Groupe)g.getGroupe(j);
                TreeNode t;


                t = treeView1.Nodes.Add(groupe.Nom);
                t.NodeFont = new Font("Arial", 12, FontStyle.Bold);

                t.ToolTipText = groupe.urlMyspace;
                t.ContextMenuStrip = contextMenuStripGroupe;

                if (groupe.concerts.Count <= 0)
                {
                    if (groupe.image_profil != null)
                    {
                        treeView1.ImageList.Images.Add(groupe.Nom, groupe.image_profil);
                        t.ImageKey = groupe.Nom;
                    }
                    else
                    {
                        t.ImageKey = "groupe";
                    }
                    
                    t.SelectedImageKey = t.ImageKey;
                    t.ForeColor = Color.Red;

                    TreeNode t_vide;
                    if (Application.CurrentCulture.TwoLetterISOLanguageName == "fr")
                    {
                        t_vide = t.Nodes.Add("Pas de concert en ce moment...");
                    }
                    else
                    {
                        t_vide = t.Nodes.Add("No events for the moment...");
                    }
                    t_vide.ImageKey = "croix";
                    t_vide.SelectedImageKey = t_vide.ImageKey;

                }
                else
                {
                    //treeView1.ImageList.Images.Add(groupe.Nom, ((Concert)groupe.concerts[0]).image);
                    if (groupe.image_profil != null)
                    {
                        treeView1.ImageList.Images.Add(groupe.Nom, groupe.image_profil);
                        t.ImageKey = groupe.Nom;
                    }
                    else
                    {
                        t.ImageKey = "groupe";
                    }
                    t.SelectedImageKey = t.ImageKey;

                    for (int i = 0; i < groupe.concerts.Count; i++)
                    {
                        Concert c = (Concert)groupe.concerts[i];
                        TreeNode t_lieu;
                        //treeView1.ImageList.Images.Add(groupe.Nom + i, c.image);
                        t_lieu = t.Nodes.Add(c.lieu);
                        t_lieu.ImageKey = "lieu";
                        t_lieu.SelectedImageKey = t_lieu.ImageKey;
                        t_lieu.ContextMenuStrip = contextMenuStripLieu;


                        TreeNode t_titre = t_lieu.Nodes.Add(c.titre);
                        t_titre.ImageKey = "titre";
                        t_titre.SelectedImageKey = t_titre.ImageKey;
                        t_titre.ContextMenuStrip = contextMenuStripTitre;



                        TreeNode t_date = t_lieu.Nodes.Add(extr.UppercaseWords(extr.getDateTimeFromText(c.date).ToString("dddd dd MMMM")) + " à " + c.heure);
                        if (Application.CurrentCulture.TwoLetterISOLanguageName != "fr")
                        {
                            t_date.Text = t_date.Text.Replace("à", "@");
                        }
                        t_date.ImageKey = "heure";
                        t_date.SelectedImageKey = t_date.ImageKey;
                        
                        for (int k = 0; k < criteres.Length; k++)
                        {

                            if (g.RemoveDiacritics(c.lieu.ToLower()).IndexOf(criteres[k]) >= 0)
                            {
                                t_lieu.BackColor = Color.Green;
                                pertinent = true;
                            }
                            if (g.RemoveDiacritics(c.titre.ToLower()).IndexOf(criteres[k]) >= 0)
                            {
                                t_lieu.BackColor = Color.Green;
                                t_titre.BackColor = Color.Green;
                                pertinent = true;
                            }
                        }
                    }

                    if (pertinent == true)
                    {
                        t.ForeColor = Color.Green;
                        pertinent = false;
                    }
                }
            }
            treeView1.EndUpdate();

            actualiser_treeview_ca_minteresse();
            actualiser_treeview_nouveaute();
        }

        private void actualiser_treeview_nouveaute()
        {
            bool pertinent = false;
            string[] separateur = { "\r\n" };
            string[] criteres = g.criteres_alerte.Split(separateur, StringSplitOptions.RemoveEmptyEntries);

            for (int k = 0; k < criteres.Length; k++)
            {
                criteres[k] = g.RemoveDiacritics(criteres[k]).ToLower();
            }

            treeViewNouveautes.BeginUpdate();

            treeViewNouveautes.Nodes.Clear();

            if (Application.CurrentCulture.TwoLetterISOLanguageName == "fr")
            {
                tabControl1.TabPages[2].Text = "C'est nouveau ! (" + g.getNouveautesCount() + ")";
            }
            else
            {
                tabControl1.TabPages[2].Text = "What's new ! (" + g.getNouveautesCount() + ")";
            }

            for (int j = 0; j < g.getNouveautesCount(); j++)
            {
                Groupe groupe = (Groupe)g.getNouveautes(j);
                TreeNode t;


                t = treeViewNouveautes.Nodes.Add(groupe.Nom);
                t.NodeFont = new Font("Arial", 12, FontStyle.Bold);

                t.ToolTipText = groupe.urlMyspace;
                t.ContextMenuStrip = contextMenuStripGroupe;

                //treeView1.ImageList.Images.Add(groupe.Nom, ((Concert)groupe.concerts[0]).image);
                //treeView1.ImageList.Images.Add(groupe.Nom, groupe.image_profil);
                t.ImageKey = groupe.Nom;
                t.SelectedImageKey = t.ImageKey;

                for (int i = 0; i < groupe.concerts.Count; i++)
                {
                    Concert c = (Concert)groupe.concerts[i];
                    TreeNode t_lieu;
                    //treeView1.ImageList.Images.Add(groupe.Nom + i, c.image);
                    t_lieu = t.Nodes.Add(c.lieu);
                    t_lieu.ImageKey = "lieu";
                    t_lieu.SelectedImageKey = t_lieu.ImageKey;
                    t_lieu.ContextMenuStrip = contextMenuStripLieu;


                    TreeNode t_titre = t_lieu.Nodes.Add(c.titre);
                    t_titre.ImageKey = "titre";
                    t_titre.SelectedImageKey = t_titre.ImageKey;
                    t_titre.ContextMenuStrip = contextMenuStripTitre;

                    TreeNode t_date = t_lieu.Nodes.Add(extr.UppercaseWords(extr.getDateTimeFromText(c.date).ToString("dddd dd MMMM")) + " à " + c.heure);
                    if (Application.CurrentCulture.TwoLetterISOLanguageName != "fr")
                    {
                        t_date.Text = t_date.Text.Replace("à", "@");
                    }
                    t_date.ImageKey = "heure";
                    t_date.SelectedImageKey = t_date.ImageKey;

                    for (int k = 0; k < criteres.Length; k++)
                    {

                        if (g.RemoveDiacritics(c.lieu.ToLower()).IndexOf(criteres[k]) >= 0)
                        {
                            t_lieu.BackColor = Color.Green;
                            pertinent = true;
                        }
                        if (g.RemoveDiacritics(c.titre.ToLower()).IndexOf(criteres[k]) >= 0)
                        {
                            t_lieu.BackColor = Color.Green;
                            t_titre.BackColor = Color.Green;
                            pertinent = true;
                        }
                    }
                }

                if (pertinent == true)
                {
                    t.ForeColor = Color.Green;
                    pertinent = false;
                }

                // En rajouter une deuxieme couche niveau texte a afficher à cause d'un bug bizarre... Laisser comme ca...
                //t.Text = groupe.Nom;
            }
            treeViewNouveautes.EndUpdate();
        }


        private void actualiser_treeview_ca_minteresse()
        {
            treeViewDates.BeginUpdate();

            treeViewDates.Nodes.Clear();

            if (Application.CurrentCulture.TwoLetterISOLanguageName == "fr")
            {
                tabControl1.TabPages[1].Text = "Ca m'intéresse ! (" + g.getCaMinteresseCount() + ")";
            }
            else
            {
                tabControl1.TabPages[1].Text = "Can't wait ! (" + g.getCaMinteresseCount() + ")";
            }

            for (int j = 0; j < g.getCaMinteresseCount(); j++)
            {
                CaMinteresse c_m = g.getCaMinteresse(j);

                TreeNode t;
                t = treeViewDates.Nodes.Add(c_m.date.ToString("D") + " à " + c_m.heure);
                if (Application.CurrentCulture.TwoLetterISOLanguageName != "fr")
                {
                    t.Text = t.Text.Replace("à", "@");
                }
                t.NodeFont = new Font("Arial", 12, FontStyle.Bold);
                t.ToolTipText = t.Text;
                t.ContextMenuStrip = contextMenuStripCaMinteresse;

                t.ImageKey = c_m.Nom_Groupe;
                t.SelectedImageKey = t.ImageKey;
                
                TreeNode t_groupe = t.Nodes.Add(c_m.Nom_Groupe);
                t_groupe.ImageKey = "groupe";
                t_groupe.SelectedImageKey = t_groupe.ImageKey;

                TreeNode t_lieu;
                //treeView1.ImageList.Images.Add(groupe.Nom + i, c.image);
                t_lieu = t.Nodes.Add(c_m.lieu);
                t_lieu.ImageKey = "lieu";
                t_lieu.SelectedImageKey = t_lieu.ImageKey;
                t_lieu.ContextMenuStrip = contextMenuStripLieu;


                TreeNode t_titre = t.Nodes.Add(c_m.titre);
                t_titre.ImageKey = "titre";
                t_titre.SelectedImageKey = t_titre.ImageKey;

                // En rajouter une deuxieme couche niveau texte a afficher à cause d'un bug bizarre... Laisser comme ca...
                //t.Text = c_m.date.ToString("D") + " à " + c_m.heure;
            }
            treeViewDates.EndUpdate();
        }

        private void suivreUnNouveauGroupeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ajouter_groupe();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            // Si le thread de chargement n'est pas encore terminé,
            if (thread_ouverture.IsAlive)
            {
                // Le quitter
                thread_ouverture.Abort();
            }
            else
            {
                // Si le thread s'était terminé, on enregistre
                g.Enregistrer();
            }

            // Tout quitter
            Environment.Exit(0);
        }

        private void paramètresToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Alertes a = new Alertes(ref g);
            a.ShowDialog(this);

            actualiser_treeview();
        }

        private void enlever_un_groupe()
        {
            string cur_groupe;
            if (treeView1.SelectedNode.FullPath.IndexOf("/") >= 0)
            {
                cur_groupe = treeView1.SelectedNode.FullPath.Substring(0, treeView1.SelectedNode.FullPath.IndexOf("/"));
            }
            else
            {
                cur_groupe = treeView1.SelectedNode.FullPath;
            }

            string message_texte;
            string title;
            if (Application.CurrentCulture.TwoLetterISOLanguageName == "fr")
            {
                title = "Ne plus suivre " + cur_groupe;
                message_texte = "Etes-vous sûr(e) de ne plus vouloir suivre " + cur_groupe + " ?";
            }
            else
            {
                title = "I don't care " + cur_groupe + " anymore !";
                message_texte = "Are you sure you want to delete " + cur_groupe + " ?";
            }
            if (MessageBox.Show(message_texte, title, MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                g.enleverGroupe(cur_groupe);

                actualiser_treeview();
            }
        }

        private void nePlusSuivreLeGroupeSélectionnéToolStripMenuItem_Click(object sender, EventArgs e)
        {
            
        }

        private void treeView1_AfterLabelEdit(object sender, NodeLabelEditEventArgs e)
        {
            if (e.CancelEdit == false && e.Label != null)
            {
                if (e.Node.FullPath.IndexOf("/") < 0)
                {
                    e.Node.Text = e.Label;
                    g.modifierGroupe(g.verifier_si_groupe_existe_deja(e.Node.Text), e.Label);
                }
                else
                {
                    e.CancelEdit = true;
                }
            }
        }

        private void treeView1_DoubleClick(object sender, EventArgs e)
        {
            char[] separateur = { '/' };
            string[] chemin = treeView1.SelectedNode.FullPath.Split(separateur);

            if (browser != null)
            {
                if (browser.IsDisposed)
                {
                    browser.Close();
                    browser = null;
                }
            }

            if (browser == null)
            {
                browser = new Browser();
            }
            

            switch(chemin.Length)
            {
                case 1:     // Si on a double cliqué sur un nom de groupe
                    browser.Show();
                    // Afficher son myspace
                    browser.afficherPage(treeView1.SelectedNode.ToolTipText);
                    break;
                case 2:     // Si on a double cliqué sur un lieu
                    if (treeView1.SelectedNode.ImageKey == "lieu")
                    {
                        browser.Show();
                        // Afficher google maps
                        //browser.afficherPage("http://maps.google.com/maps?hl=" + Application.CurrentCulture.TwoLetterISOLanguageName + "&q=" + HttpUtility.HtmlEncode(treeView1.SelectedNode.Text));
                        browser.afficherPage("http://maps.google.com/maps?hl=" + Application.CurrentCulture.TwoLetterISOLanguageName + "&q=" + treeView1.SelectedNode.Text);
                    }
                    else
                    {
                        //Microsoft.Office.Interop.Outlook.Application outlookApp = new Microsoft.Office.Interop.Outlook.Application();
                        
                    }
                    break;
                case 3:     // Si on a double cliqué sur un titre
                    if (treeView1.SelectedNode.ImageKey == "titre")
                    {
                        browser.Show();
                        // Afficher google maps
                        //browser.afficherPage("http://www.google.com/#hl=" + Application.CurrentCulture.TwoLetterISOLanguageName + "&source=hp&q=" + HttpUtility.HtmlEncode(chemin[1] + " " + treeView1.SelectedNode.Text));
                        browser.afficherPage("http://www.google.com/#hl=" + Application.CurrentCulture.TwoLetterISOLanguageName + "&source=hp&q=" + chemin[1] + " " + treeView1.SelectedNode.Text);
                    }
                    break;
                default :
                    break;
            }

            
        }

        private void quitterToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Environment.Exit(0);
        }

        private void afficherLeMyspaceToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (treeView1.SelectedNode != null)
            {
                char[] separateur = { '/' };
                string[] chemin = treeView1.SelectedNode.FullPath.Split(separateur);

                if (browser != null)
                {
                    if (browser.IsDisposed)
                    {
                        browser.Close();
                        browser = null;
                    }
                }

                if (browser == null)
                {
                    browser = new Browser();
                }

                browser.Show();
                // Afficher son myspace
                browser.afficherPage(treeView1.SelectedNode.ToolTipText);
            }
        }

        private void supprimerToolStripMenuItem_Click(object sender, EventArgs e)
        {
            enlever_un_groupe();
        }

        private void toolStripMenuItem1_Click(object sender, EventArgs e)
        {
            if (treeView1.SelectedNode != null)
            {
                char[] separateur = { '/' };
                string[] chemin = treeView1.SelectedNode.FullPath.Split(separateur);

                if (browser != null)
                {
                    if (browser.IsDisposed)
                    {
                        browser.Close();
                        browser = null;
                    }
                }

                if (browser == null)
                {
                    browser = new Browser();
                }

                if (treeView1.SelectedNode.ImageKey == "lieu")
                {
                    browser.Show();
                    // Afficher google maps
                    //browser.afficherPage("http://maps.google.fr/maps?hl=fr&q=" + HttpUtility.HtmlEncode(treeView1.SelectedNode.Text));
                    browser.afficherPage("http://maps.google.fr/maps?hl=fr&q=" + treeView1.SelectedNode.Text);
                }
            }
        }

        private void treeView1_MouseDown(object sender, MouseEventArgs e)
        {
            // Lors d'un click droit, le node n'est pas sélectionné automatiquement, donc on le sélectionne
            if (e.Button == MouseButtons.Right)
            {
                // Sélectionner le noeud sur lequel on a cliqué
                treeView1.SelectedNode = treeView1.GetNodeAt(e.X, e.Y);
            }
        }

        private void toolStripMenuItem3_Click(object sender, EventArgs e)
        {
            TreeView cur_treeview;
            switch (tabControl1.SelectedIndex)
            {
                case 1:
                    cur_treeview = treeViewDates;
                    break;
                case 2:
                    cur_treeview = treeViewNouveautes;
                    break;
                default:
                    cur_treeview = treeView1;
                    break;
            }

            if (cur_treeview.SelectedNode != null)
            {
                char[] separateur = { '/' };
                string[] chemin = cur_treeview.SelectedNode.FullPath.Split(separateur);

                if (browser != null)
                {
                    if (browser.IsDisposed)
                    {
                        browser.Close();
                        browser = null;
                    }
                }

                if (browser == null)
                {
                    browser = new Browser();
                }

                if (cur_treeview.SelectedNode.ImageKey == "titre")
                {
                    browser.Show();
                    // Afficher google maps
                    //browser.afficherPage("http://www.google.com/#hl=" + Application.CurrentCulture.TwoLetterISOLanguageName + "&source=hp&q=" + HttpUtility.HtmlEncode(chemin[1] + " " + cur_treeview.SelectedNode.Text));
                    browser.afficherPage("http://www.google.com/#hl=" + Application.CurrentCulture.TwoLetterISOLanguageName + "&source=hp&q=" + chemin[1] + " " + cur_treeview.SelectedNode.Text);
                }
            }
        }

        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            TreeView cur_treeview;
            switch(tabControl1.SelectedIndex)
            {
                case 1 :
                    cur_treeview = treeViewDates;
                    break;
                case 2:
                    cur_treeview = treeViewNouveautes;
                    break;
                default :
                    cur_treeview = treeView1;
                    break;
            }

            if (cur_treeview.SelectedNode != null)
            {
                char[] separateur = { '/' };
                string[] chemin = cur_treeview.SelectedNode.FullPath.Split(separateur);

                if (browser != null)
                {
                    if (browser.IsDisposed)
                    {
                        browser.Close();
                        browser = null;
                    }
                }

                if (browser == null)
                {
                    browser = new Browser();
                }

                if (cur_treeview.SelectedNode.ImageKey == "lieu")
                {
                    browser.Show();
                    // Afficher google maps
                    //browser.afficherPage("http://maps.google.com/maps?hl=" + Application.CurrentCulture.TwoLetterISOLanguageName + "&saddr=" + HttpUtility.HtmlEncode(g.adresse) + "&daddr=" + HttpUtility.HtmlEncode(cur_treeview.SelectedNode.Text));
                    browser.afficherPage("http://maps.google.com/maps?hl=" + Application.CurrentCulture.TwoLetterISOLanguageName + "&saddr=" + HttpUtility.HtmlEncode(g.adresse) + "&daddr=" + cur_treeview.SelectedNode.Text);
                }
            }
        }

        private void itinéraireRATPToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (treeView1.SelectedNode != null)
            {
                char[] separateur = { '/' };
                string[] chemin = treeView1.SelectedNode.FullPath.Split(separateur);

                if (browser != null)
                {
                    if (browser.IsDisposed)
                    {
                        browser.Close();
                        browser = null;
                    }
                }

                if (browser == null)
                {
                    browser = new Browser();
                }

                if (treeView1.SelectedNode.ImageKey == "lieu")
                {
                    browser.Show();
                    // Afficher le site de la RATP
                    Groupe g_tmp = g.getGroupe(g.verifier_si_groupe_existe_deja(chemin[0]));
                    Concert c_tmp = (Concert)(g_tmp.concerts[treeView1.SelectedNode.Index]);

                    /*
                    string[] heure_minute;
                    separateur = new char[2];
                    separateur[0] = ':';
                    separateur[1] = ' ';
                    heure_minute = c_tmp.heure.Split(separateur);
                    if (heure_minute.Length >= 3)
                    {
                        if (heure_minute[2].ToLower() == "pm")
                        {
                            heure_minute[0] = "" + (int.Parse(heure_minute[0]) + 12);
                        }
                    }*/
                    
                    DateTime d = extr.getDateTimeFromText(c_tmp.date);

                    DialogResult dr;

                    if (Application.CurrentCulture.TwoLetterISOLanguageName == "fr")
                    {
                        dr = MessageBox.Show("Attention ! Cette fonctionnalité ne fonctionne que pour la région parisienne !\nVoulez vous poursuivre ?\nMerci de bien vérifier l'adresse de destination. Celle-ci est tirée d'une requête Web et peut être erronée.", "Itinéraire RATP", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                    }
                    else
                    {
                        dr = MessageBox.Show("Caution ! This feature only works for Paris and surroundings !\nWould you still like to proceed ?\nPlease check the destination address as it is deduced from web queries and can be wrong.", "Add a new band", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                    }

                    if (dr == DialogResult.Yes)
                    {
                        //browser.afficherPage("http://www33.ratp.info/Pivi/piviweb.php?exec=piviweb&cmd=Itineraire&Profil=RATP&nom_dep=" + HttpUtility.HtmlEncode(g.adresse.Replace(" ", "+")) + "&type_dep=RUE&nom_arr=" + HttpUtility.HtmlEncode(treeView1.SelectedNode.Text).Replace(" ", "+") + "&type_arr=RUE&mode=TOUS_MODE&critere=PLUS_RAPIDE&jour=" + d.Day + "&mois=" + d.Month + "&annee=" + d.Year + "&heure=" + heure_minute[0] + "&minute=" + heure_minute[1] + "&typeDate=DATE_ARRIVEE");
                        //http://www.ratp.fr/itineraires/fr/ratp/resultat-simple/3+Rue+Des+Huguenots+Cergy/Gare+De+Lyon+%28METRO%29%2CParis/is_date_start/0/date/2011-01-09/time/10%3A05%3A00/route_type/plus_rapide
                        browser.afficherPage("http://www.ratp.fr/itineraires/fr/ratp/resultat-simple/" + HttpUtility.HtmlEncode(g.adresse.Replace(" ", "+")) + "/" + HttpUtility.HtmlEncode(g.RemoveDiacritics(extr.ChercherAdresseSurGoogle(c_tmp.titre + ", " + c_tmp.lieu))).Replace(" ", "+").Replace("/", ",") + "/is_date_start/0/date/" + d.ToString("s").Replace("T", "/time/").Replace(":", "%3A") + "/route_type/plus_rapide");
                    }
                }
            }
            
        }

        private void ajouterCaMinteresse()
        {
            char[] separateur = { '/' };
            string[] chemin;
            string chemin_brut;

            int index_node = 0;


            TreeView cur_treeview;
            switch (tabControl1.SelectedIndex)
            {
                case 1:
                    cur_treeview = treeViewDates;
                    chemin = cur_treeview.SelectedNode.FullPath.Split(separateur);
                    index_node = cur_treeview.SelectedNode.Index;
                    break;
                case 2:
                    cur_treeview = treeViewNouveautes;
                    chemin_brut = cur_treeview.SelectedNode.FullPath;
                    chemin = chemin_brut.Split(separateur);
                    if (chemin.Length >= 2)
                    {
                        chemin_brut = cur_treeview.SelectedNode.FullPath.Substring(0, cur_treeview.SelectedNode.FullPath.LastIndexOf("/"));
                        chemin = chemin_brut.Split(separateur);
                        index_node = cur_treeview.SelectedNode.Parent.Index;
                    }
                    
                    break;
                default:
                    cur_treeview = treeView1;
                    chemin = cur_treeview.SelectedNode.FullPath.Split(separateur);
                    index_node = cur_treeview.SelectedNode.Index;
                    break;
            }

            

            g.ajouterCaMinteresse(chemin[0], (Concert)(g.getGroupe(g.verifier_si_groupe_existe_deja(chemin[0])).concerts[index_node]));

            switch (tabControl1.SelectedIndex)
            {
                case 0:
                    actualiser_treeview();
                    break;
                case 2:
                    actualiser_treeview_ca_minteresse();
                    actualiser_treeview_nouveaute();
                    break;
                default:
                    actualiser_treeview_ca_minteresse();
                    break;
            }
        }

        private void caMintéresseToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ajouterCaMinteresse();
        }

        private void toolStripMenuItem5_Click(object sender, EventArgs e)
        {
            ajouterCaMinteresse();
        }

        private void treeViewDates_Click(object sender, EventArgs e)
        {

        }

        private void treeViewDates_MouseDown(object sender, MouseEventArgs e)
        {
            actualiser_treeview_ca_minteresse();
        }

        private void ajouter_groupe()
        {
            AjoutGroupe a = new AjoutGroupe(ref g);
            a.ShowDialog(this);

            actualiser_treeview();
            g.Enregistrer();
        }

        private void suivreUnNouveauGroupeToolStripMenuItem1_Click(object sender, EventArgs e)
        {
            ajouter_groupe();
        }

        private void suivreUnNouveauGroupeToolStripMenuItem2_Click(object sender, EventArgs e)
        {
            ajouter_groupe();
        }

        private void suivreUnNouveauGroupeToolStripMenuItem3_Click(object sender, EventArgs e)
        {
            ajouter_groupe();
        }

        private void supprimer_caminteresse()
        {
            if(treeViewDates.SelectedNode != null)
            {
                char[] separateur = { '/' };
                string[] chemin = treeViewDates.SelectedNode.FullPath.Split(separateur);

                // Remonter dans la hierarchie pour atteindre la racine
                TreeNode t_origine = treeViewDates.SelectedNode;
                for(int i = 0;i<chemin.Length - 1;i++)
                {
                    t_origine = t_origine.Parent;
                }

                // Enlever l'évenement qui correspond a l'index du noeud t_origine dans la liste treeview
                g.enleverCaMinteresse(t_origine.Index);
                actualiser_treeview_ca_minteresse();
            }
        }

        private void toolStripMenuItem6_Click(object sender, EventArgs e)
        {
            supprimer_caminteresse();
        }

        private void treeViewDates_MouseDown_1(object sender, MouseEventArgs e)
        {
            // Lors d'un click droit, le node n'est pas sélectionné automatiquement, donc on le sélectionne
            if (e.Button == MouseButtons.Right)
            {
                // Sélectionner le noeud sur lequel on a cliqué
                treeViewDates.SelectedNode = treeViewDates.GetNodeAt(e.X, e.Y);
            }
        }

        private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
        {

        }

        private void treeViewNouveautes_MouseDown(object sender, MouseEventArgs e)
        {
            // Lors d'un click droit, le node n'est pas sélectionné automatiquement, donc on le sélectionne
            if (e.Button == MouseButtons.Right)
            {
                // Sélectionner le noeud sur lequel on a cliqué
                treeViewNouveautes.SelectedNode = treeViewNouveautes.GetNodeAt(e.X, e.Y);
            }
        }

        private void ajouterAgendaGoogle()
        {
            TreeView cur_treeview;
            switch (tabControl1.SelectedIndex)
            {
                case 1:
                    cur_treeview = treeViewDates;
                    break;
                case 2:
                    cur_treeview = treeViewNouveautes;
                    break;
                default:
                    cur_treeview = treeView1;
                    break;
            }

            if (cur_treeview.SelectedNode != null)
            {
                char[] separateur = { '/' };
                string[] chemin = cur_treeview.SelectedNode.FullPath.Split(separateur);

                if (browser != null)
                {
                    if (browser.IsDisposed)
                    {
                        browser.Close();
                        browser = null;
                    }
                }

                if (browser == null)
                {
                    browser = new Browser();
                }


                browser.Show();
                // Afficher google maps
                //browser.afficherPage("http://maps.google.fr/maps?hl=fr&saddr=" + "Cergy" + "&daddr=" + HttpUtility.HtmlEncode(cur_treeview.SelectedNode.Text));
                

                // Remonter dans la hierarchie pour atteindre la racine
                TreeNode t_origine = cur_treeview.SelectedNode;
                for(int i = 0;i<chemin.Length - 1;i++)
                {
                    t_origine = t_origine.Parent;
                }

                CaMinteresse cm_tmp = g.getCaMinteresse(t_origine.Index);
                
                string[] heure_minute;
                separateur = new char[2];
                separateur[0] = ':';
                separateur[1] = ' ';
                heure_minute = cm_tmp.heure.Split(separateur);
                if (heure_minute.Length >= 3)
                {
                    if (heure_minute[2].ToLower() == "pm")
                    {
                        heure_minute[0] = "" + (int.Parse(heure_minute[0]) + 12);
                    }
                }

                DateTime date_debut = new DateTime(cm_tmp.date.Year, cm_tmp.date.Month, cm_tmp.date.Day, int.Parse(heure_minute[0]), int.Parse(heure_minute[1]), 0);
                
                DateTime date_fin;
                date_fin = date_debut.AddHours(4);

                date_debut = date_debut.ToUniversalTime();
                date_fin = date_fin.ToUniversalTime();

                string urlMyspace = g.getGroupe(g.verifier_si_groupe_existe_deja(cm_tmp.Nom_Groupe)).urlMyspace;

                //Console.WriteLine(HttpUtility.UrlPathEncode("http://www.google.com/calendar/event?action=TEMPLATE&text=Concert - " + cm_tmp.Nom_Groupe + "&dates=" + date_debut.ToString("yyyyMMddTHHmm") + "00Z/" + date_fin.ToString("yyyyMMddTHHmm") + "00Z&details=Concert : " + cm_tmp.titre + "<br>" + cm_tmp.Nom_Groupe + " : <a href='" + urlMyspace + "'>" + urlMyspace + "</a>&location=" + cm_tmp.lieu + "&trp=true&sprop=&sprop=name:"));
                //Console.WriteLine("http://www.google.com/calendar/event?action=TEMPLATE&text;=Concert - " + cm_tmp.Nom_Groupe + "&dates;=" + date_debut.ToString("yyyyMMddTHHmm") + "00Z/" + date_fin.ToString("yyyyMMddTHHmm") + "00Z&location;=" + cm_tmp.lieu + "&details;=Concert : " + cm_tmp.titre + "<br>" + cm_tmp.Nom_Groupe + " : " + g.getGroupe(g.verifier_si_groupe_existe_deja(cm_tmp.Nom_Groupe)).urlMyspace + "&trp;=true&sprop;=:http://code.google.com/p/concertspace&sprop;=name:ConcertSpace");
                browser.afficherPage(HttpUtility.UrlPathEncode("http://www.google.com/calendar/event?action=TEMPLATE&text=" + extr.EncoderCGI("Concert - " + cm_tmp.Nom_Groupe) + "&dates=" + date_debut.ToString("yyyyMMddTHHmm") + "00Z/" + date_fin.ToString("yyyyMMddTHHmm") + "00Z&details=Concert : " + extr.EncoderCGI(cm_tmp.titre + "<br>" + cm_tmp.Nom_Groupe + " : " + urlMyspace) + "&location=" + extr.EncoderCGI(cm_tmp.lieu) + "&trp=true&sprop=&sprop=name:"));
            }
        }

        private void ajouterÀMonGoogleAgendaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ajouterAgendaGoogle();
        }

        private void toolStripMenuItem4_Click(object sender, EventArgs e)
        {
            if (Application.CurrentCulture.TwoLetterISOLanguageName == "fr")
            {
                MessageBox.Show("Logiciel codé par RD.\nL'utilisation de ce logiciel n'engage que votre propre responsabilité. Nous ne sommes en aucun cas responsable des éventuels dommages ou conséquences entrainées par l'utilisation de ce logiciel !\n\nSi vous aimez ce logiciel, merci de nous soutenir en allant sur http://code.google.com/p/concertspace/ !\nLaissez un petit message !", "A propos", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                MessageBox.Show("Coded by RD.\nUse this software at your own risks. We are not responsible for any consequence, damage or injury caused by the use of this software !\n\nIf you like that software, please leave us a message on http://code.google.com/p/concertspace/ !\nThanks !", "About", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void optionsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmOptions options = new frmOptions(ref g);
            options.ShowDialog(this);
            
            options = null;

        }
    }
}
